# -*- coding: utf-8 -*-
"""
Created on Tue Aug 15 14:12:18 2023

@author: skunk69
"""

import json

chinese_name = u'儿童少年生活质量量表'
english_name = 'Quality of Life Scale for Children and Adolescents'
abbreviation = 'QLSCA'
category = u'生活质量与满意度量表'

outline = u"""生活质量是对人们生活的全面评价和总结，是一个涵盖面非常广泛的概念，它既与生活的客观物质条件有关，也与对生活的主观满意程度有关。儿童少年生活质量量表(quality of life scale for children and adolescents，QLSCA)是一份针对一般儿童少年，以学习生活为核心，涵盖生理、心理、社会功能及生活环境等领域，适用于7~18岁中小学生的多维度生活质量自评量表。
本量表由华中科技大学同济医院儿童少年卫生学教研室于2000年编制，并于2002年制订全国常模。该量表不仅可以应用于一般儿童少年生活质量的评估，也可以与其他儿童少年疾病专门化生活质量量表联合应用，评估疾病及其治疗对患儿生活质量的影响。"""

instruction = u"""这份问卷是为了了解你的生活状况，与你是否聪明、是否好学生没有关系，题目的答案也没有正确与错误之分。"""

hints = {}
hints[1] = u"""一、请你根据自己的实际情况，选择与你的感觉和生活最接近的答案。每题只选一个答案。"""
hints[21] = u"""二、请选择与你的实际情况最符合的选项：“从不这样”，“很少这样”，“经常这样”，“总是这样”。每题只选一个结果。"""

items = {}
rating = {}
with open('QLSCA.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

for num,line in enumerate(lines[0:100:5]):
    key,value = line.strip().split('、',maxsplit=1)
    items[key] = value.strip()
    rating[key] = [rate.strip() for rate in lines[num*5+1:num*5+5]]
        
for line in lines[100::]:
    key,value = line.strip().split('、',maxsplit=1)
    items[key] = value.strip()
    rating[key] = [u'从不这样',u'很少这样',u'经常这样',u'总是这样']

reverse_items = [21,23,24,27,28,31,32,35,39,40,43,45,47]
scales = [u'自我满意度',u'师生关系',u'躯体感受',u'同伴关系',u'亲子关系',
          u'运动能力',u'学习能力与态度',u'自我概念',u'负性情绪',u'作业态度',
          u'活动机会性',u'生活便利性',u'其他']
scales_items = [
    [3,12,13,14,17,20],# 自我满意度
    [5,16,26,41,46],# 师生关系
    [31,39,40,43,47],# 躯体感受
    [1,8,9,19,29],# 同伴关系
    [6,37,44,49],# 亲子关系
    [2,10,48],# 运动能力
    [25,30,34],# 学习能力与态度
    [22,36,38,42],# 自我概念
    [21,28,32,35],# 负性情绪
    [23,24,45],# 作业态度
    [4,7,33],# 活动机会性
    [15,18],# 生活便利性
    [11,27],# 其他    
    ]

# check scales_items
print(f'scale length={[len(l) for l in scales_items]}')

check = []
for l in scales_items:
    check = check+l
print(f'len(check)={len(check)}')

# complementary set
check_set = {i for i in sorted(check)}^{i for i in range(1,50)}
print(f'complementary set= {check_set}')

factors = [u'社会心理功能',u'生理心理健康',u'生活环境',u'生活质量满意度']
factors_scales = [
    [scales[1],scales[3],scales[4],scales[6],scales[7]],
    [scales[2],scales[8],scales[9]],
    [scales[5],scales[10],scales[11]],
    [scales[0]],
    ]

score_rules = list(range(1,5))

contents = {
    'instruction':instruction,
    'hints':hints,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""《儿童少年生活质量量表》是一个自评量表，适用于7~18岁中小学生的多维度生活质量自评量表，可以个别进行，也可以团体测试。"""

reliability = u"""本量表的分半信度系数（r）为0.82，整个量表校正信度系数0.90，各维度、因子和总量表的重测信度为0.554~0.768。各项指标均达到心理测量学对信度的要求。"""
validity = u"""在效度方面，在编制和修订阶段，量表研究组请11位有关专家和若干被试者对量表众多条目的重要性进行评价，内容效度比为0.43~1.00，说明本量表能反映儿童少年生活状况主要方面的有关内容，可以通过此量表对儿童少年生活质量状况进行评定，具有良好的内容效度。
在结构效度方面，通过探索性因素分析提取了13个维度，各条目在相应维度的负荷值均大于0.40，对13个维度进行主成分分析，采用最大正交旋转后根据特征值大于1的标准提取了3个共性因子，累计方差贡献率51.1%。这与原量表分为生理心理、社会功能和生活环境几个领域的构思基本一致。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""儿童少年生活质量量表包括13个维度：自我满意度，师生关系，躯体感受，同伴关系，亲子关系，运动能力，学习能力与态度，自我概念，负性情绪，作业态度，活动机会性，生活便利性及其他。13个维度又分别组成4个因子：社会心理功能，生理心理健康，生活环境和生活质量满意度。该量表包含13个反向条目。
对负性条目进行转换后，即可对相应维度和因子进行求和。维度分等于组成该维度的各条目得分之和。因子分等于组成该因子的各维度分之和。所有条目得分之和为该量表总分。
得到初分（X）之后，根据全国常模平均分（M）和标准差（SD），来计算标准T分：T = 50+（X-M）/ SDX10。
评价等级分为5级，T<30，为生活质量差；30<T<40，为生活质量较差；40<T<60，为生活质量中等；60<T<70，为生活质量较好；T>70，为生活质量非常好。"""

applications = u"""华中科技大学同济医院儿童少年卫生学教研室于2002年制订全国常模。
彭宁宁等对上海市中小学生的生活质量进行调研，发现在大家庭和核心家庭的学生生活质量明显比单亲家庭学生高，单亲家庭的学生不仅生活环境状况明显低于大家庭与核心家庭的学生，而且生理和心理2个维度得分也低于其他类型家庭。
王丽萍等应用本量表及父母教养方式评价量表对父母教养方式与中学生生活质量间的联系进行分析，其结果显示，生活质量总分及总体满意度、生理心理健康、心理社会功能及生活环境等4个因子受父母情感温暖、理解的保护，而父母的拒绝否认、过分干涉，则使中学生对自己生活质量评分低。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)